home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
PC World Interactive 7
/
PC World Interactive 7.iso
/
program
/
qbprog.EXE
/
KESMECE.BAS
< prev
next >
Wrap
BASIC Source File
|
1980-01-10
|
10KB
|
334 lines
DECLARE SUB Yardim ()
DECLARE SUB Bekle ()
DECLARE SUB Bellek (A%)
DECLARE SUB Bitir ()
DECLARE SUB Cizgi ()
DECLARE SUB DusmanCiz ()
DECLARE SUB Hata (A$)
DECLARE SUB iptal (A%)
DECLARE SUB isimal ()
DECLARE SUB Oyna ()
DECLARE SUB Puanlist ()
DECLARE FUNCTION RenkKontrol% (Dusyer%())
DECLARE FUNCTION Tus% ()
DECLARE SUB Tusunut ()
DEFINT A-Z
DECLARE FUNCTION GetCS% ()
DECLARE FUNCTION GetOF% ()
DECLARE SUB Resmet (BYVAL B%, C%)
DECLARE SUB Resim ()
DECLARE SUB Font ()
DECLARE SUB Dinle (BYVAL Segm%)
DECLARE SUB Dinle2 (BYVAL Segm%)
DECLARE SUB YavasKapa ()
DECLARE SUB Kapa ()
'===========================================================================
'Sabitler
CONST Zemin = 2, Kutu = 223, Cizim = 254, Boya = 40, icKutu = 222
CONST Dusman = 253, Punto = 4
CONST OyunHizi = 1
'===========================================================================
'Deºiƒkenler
TYPE RegTypeX
Ax AS INTEGER
Bx AS INTEGER
Cx AS INTEGER
Dx AS INTEGER
bp AS INTEGER
si AS INTEGER
di AS INTEGER
Flags AS INTEGER
Ds AS INTEGER
Es AS INTEGER
END TYPE
DIM SHARED yap AS RegTypeX
DIM SHARED Yatay, Dikey, Yatay1, Dikey1
DIM SHARED Aktif, Yol$, Zaman#
DIM SHARED Puan(10), Puan$(10)
DIM SHARED Dusyer(10), Hayat, Dudak(330)
DIM SHARED Player%
'===========================================================================
'Program
CALL Bellek(2720): Player% = yap.Ax
SCREEN 13
ON ERROR GOTO Hatalar
Resim
Font
DO
Dinle Player%
Puanlist
Kapa
Dinle2 Player%
Oyna
isimal
Kapa
LOOP
Hatalar:
Hata ("Disketin korumasìnì kaldìrìn...")
SUB Bekle
DEF SEG = 0
IF PEEK(1052) > PEEK(1050) + 15 THEN POKE 1050, PEEK(1052)
z = PEEK(1132)
DO
IF PEEK(1132) - z = OyunHizi OR z > PEEK(1132) THEN EXIT DO
LOOP
END SUB
SUB Bellek (A%)
Bos& = SETMEM(-1 * (A% + 17))
yap.Ax = &H4800: yap.Bx = A% \ 16 + 1
CALL Interruptx(&H21, yap, yap)
IF (yap.Flags AND 1) THEN PRINT "Hata": END
END SUB
SUB Bitir
CLS
YavasKapa
Yer = -1
FOR i = 182 TO 13 STEP -1
Yer = Yer + 1: B% = 800 + (Yer) * 180: C% = i * 320
CALL Resmet(B%, C%): IF i / 10 = i \ 10 THEN Bekle
NEXT
FOR i = 1 TO 30: Bekle: NEXT
Kapa
END
END SUB
SUB Cizgi
SELECT CASE POINT(Yatay, Dikey)
CASE Zemin, Cizim, Punto
PSET (Yatay1, Dikey1), Punto
IF Aktif = 0 THEN Yol$ = Yol$ + CHR$(Yatay1) + CHR$(Dikey1)
IF POINT(Yatay, Dikey) = Zemin THEN Aktif = 1
CASE icKutu
PSET (Yatay1, Dikey1), icKutu
IF Aktif = 1 THEN
iptal (icKutu)
PAINT (Dusyer(1), Dusyer(2)), Kutu, icKutu
PAINT (12, 12), Boya, Kutu
PAINT (Dusyer(1), Dusyer(2)), Zemin, Boya
LINE (11, 11)-(195, 185), Zemin, B
PAINT (12, 12), icKutu, Zemin
LINE (11, 11)-(195, 185), Kutu, B
Puan(0) = 0
FOR i = 13 TO 182
B% = 800 + (i - 13) * 180: C% = i * 320
CALL Resmet(B%, C%): Puan(0) = Puan(0) + C%
NEXT
IF POINT(Yatay, Dikey) <> icKutu THEN
FOR i = Dusyer(1) TO 193
IF POINT(i, Dusyer(2)) = icKutu THEN Yatay = i: Dikey = Dusyer(2): EXIT FOR
NEXT
END IF
Tusunut
END IF
CASE ELSE
Yatay = Yatay1: Dikey = Dikey1
END SELECT
IF Aktif = 1 THEN
Yol$ = Yol$ + CHR$(Yatay) + CHR$(Dikey)
PSET (Yatay, Dikey), Cizim
ELSE
PSET (Yatay, Dikey), 0
END IF
Yatay1 = Yatay: Dikey1 = Dikey
END SUB
SUB DusmanCiz
IF Aktif = 1 THEN
IF Yatay < Dusyer(1) + 2 THEN Dusyer(3) = -2: ELSE Dusyer(3) = 2
IF Dikey < Dusyer(2) + 2 THEN Dusyer(4) = -2: ELSE Dusyer(4) = 2
END IF
A = RND * 164
IF A < 2 THEN Dusyer(3) = Dusyer(3) * -1: Dusyer(4) = Dusyer(4) * -1
Dusyer(6) = Dusyer(1): Dusyer(7) = Dusyer(2)
A = RND * 11
IF A < 5 THEN Dusyer(1) = Dusyer(1) + Dusyer(3) ELSE Dusyer(2) = Dusyer(2) + Dusyer(4)
Renk = RenkKontrol(Dusyer())
IF Renk <> -1 THEN
LINE (Dusyer(6), Dusyer(7))-(Dusyer(6) + 22, Dusyer(7) + 13), Zemin, BF
PUT (Dusyer(1), Dusyer(2)), Dudak, PSET: Bekle
ELSE
Dusyer(3) = Dusyer(3) * -1: Dusyer(4) = Dusyer(4) * -1
Dusyer(1) = Dusyer(6): Dusyer(2) = Dusyer(7)
END IF
END SUB
SUB Hata (A$)
COLOR 40: CLS : PRINT A$: YavasKapa: FOR i = 1 TO 30: Bekle: NEXT: Kapa
END
END SUB
SUB iptal (A%)
FOR i = LEN(Yol$) TO 2 STEP -2
PSET (ASC(MID$(Yol$, i - 1, 1)), ASC(MID$(Yol$, i, 1))), A%
NEXT
Yol$ = "": Aktif = 0
END SUB
SUB isimal
IF Puan(10) >= Puan(0) THEN EXIT SUB
Puan$(0) = SPACE$(25)
B$ = STR$(Puan(0)): MID$(Puan$((0)), 26 - LEN(B$), LEN(B$)) = B$
FOR i = 1 TO 10
FOR n = 0 TO 9
B = VAL(RIGHT$(Puan$(i), 5)): C = VAL(RIGHT$(Puan$(n), 5))
IF C < B THEN SWAP Puan$(i), Puan$(n)
NEXT: NEXT
COLOR 4: CLS
FOR i = 0 TO 9
IF VAL(RIGHT$(Puan$(i), 5)) = Puan(0) THEN isimY = i
LOCATE , 2: PRINT i + 1; : LOCATE , 7: PRINT Puan$(i)
NEXT
Y = 1
DO
COLOR 40: LOCATE isimY + 1, 7: PRINT Puan$(isimY); : COLOR 8: LOCATE , 6 + Y: PRINT "■"
A$ = INKEY$
IF A$ <> "" AND LEN(A$) = 1 THEN
LOCATE isimY + 1, 6 + Y: PRINT " "
IF ASC(A$) = 8 AND Y > 1 THEN MID$(Puan$(isimY), Y, 1) = " ": Y = Y - 1
IF ASC(A$) = 27 THEN EXIT SUB
IF ASC(A$) = 13 THEN EXIT DO
IF ASC(A$) > 27 THEN MID$(Puan$(isimY), Y, 1) = A$: Y = Y + 1: IF Y > 18 THEN Y = 18
END IF
LOOP
A$ = "": FOR i = 1 TO 10: A$ = A$ + Puan$(i - 1): NEXT
FOR i = 1 TO 250
Kontrol# = Kontrol# + i * ASC(MID$(A$, i, 1))
NEXT
PUT #1, 1, A$: PUT #1, , Kontrol#
END SUB
SUB Oyna
COLOR 4: CLS
FOR Y = 66 TO 79
FOR i = 76 TO 98
DEF SEG = GetCS: B = PEEK(GetOF + 801 + i + Y * 180)
DEF SEG = &HA000: POKE Y * 320 + i, B
NEXT: NEXT
GET (76, 66)-(98, 79), Dudak
LINE (11, 11)-(194, 184), Kutu, B: LINE (12, 12)-(193, 183), Zemin, BF: LINE (13, 13)-(192, 182), icKutu, B
COLOR 1: LOCATE 2, 26: PRINT "Puan:": LOCATE 3, 26: PRINT "Oyuncu :": LOCATE 4, 26: PRINT "Süre:": LOCATE 7, 26: PRINT "Müzik:": LOCATE 10, 26: PRINT "Grafik:"
COLOR 8: LOCATE 11, 26: PRINT "Gürol DEMÿR": LOCATE 8, 26: PRINT "M.Doºan ÖZDEMÿR"
Yatay1 = 13: Dikey1 = 13: Yatay = 13: Dikey = 13
Dusyer(1) = 50: Dusyer(2) = 50: Dusyer(3) = 3: Dusyer(4) = 3: Hayat = 10
Puan(0) = 0
Zaman# = FIX(TIMER) + 600
DO
IF Tus THEN EXIT DO
Cizgi
DusmanCiz
COLOR 8: LOCATE 2, 31: PRINT USING "##,###"; Puan(0)
LOCATE , 34: PRINT Hayat: IF Hayat = 0 THEN EXIT DO
IF Zaman# - FIX(TIMER) > 600 THEN Zaman# = Zaman# - 86400
LOCATE , 33: PRINT Zaman# - FIX(TIMER): IF Zaman# - FIX(TIMER) <= 0 THEN EXIT DO
LOOP
END SUB
SUB Puanlist
CLOSE #1: OPEN "KESMECE.SCR" FOR BINARY AS #1
Basla:
Kontrol# = 0
COLOR 4: CLS : LOCATE , 12: PRINT "Puan Listesi"
IF LOF(1) = 0 THEN A$ = SPACE$(250): PUT #1, 1, A$: Kontro# = 1004000: PUT #1, , Kontro#
A$ = SPACE$(250): GET #1, 1, A$
FOR i = 1 TO 250
Kontrol# = Kontrol# + i * ASC(MID$(A$, i, 1))
NEXT
GET #1, , Kontro#
IF Kontro# <> Kontrol# THEN Hata ("Puan listesi karìƒtìrìlmìƒ !!!")
Yer = 0
FOR i = 1 TO 250 STEP 25
A$ = SPACE$(25): GET #1, i, A$: Yer = Yer + 1
LOCATE , 2: PRINT Yer; : LOCATE , 7: PRINT A$
Puan(Yer) = VAL(RIGHT$(A$, 5)): Puan$(Yer) = A$
NEXT
LOCATE , 6: PRINT "Esc)Bitir Enter)Oyna F1)Yardìm"
KEY 1, CHR$(255)
DO
DO: A$ = INKEY$: LOOP UNTIL A$ <> ""
IF ASC(A$) = 255 THEN Yardim: GOTO Basla
IF ASC(A$) = 27 THEN Bitir
IF ASC(A$) = 13 THEN EXIT DO
LOOP
END SUB
FUNCTION RenkKontrol (Dusyer())
FOR i = Dusyer(1) TO Dusyer(1) + 22
FOR Y = Dusyer(2) TO Dusyer(2) + 13
SELECT CASE POINT(i, Y)
CASE Cizim, Punto
Hayat = Hayat - 1
Yatay1 = ASC(Yol$)
Dikey1 = ASC(MID$(Yol$, 2, 1))
Yatay = ASC(Yol$)
Dikey = ASC(MID$(Yol$, 2, 1))
iptal (Zemin)
PSET (Yatay, Dikey), 0
RenkKontrol = -1
Tusunut
EXIT FUNCTION
CASE icKutu, 0
RenkKontrol = -1: EXIT FUNCTION
END SELECT
NEXT: NEXT
END FUNCTION
FUNCTION Tus
A$ = INKEY$
IF A$ = "" THEN EXIT FUNCTION
IF ASC(A$) = 27 THEN Tus = -1: EXIT FUNCTION
IF LEN(A$) = 2 THEN
z = ASC(RIGHT$(A$, 1))
SELECT CASE z
CASE 75
IF Yatay > 13 THEN Yatay = Yatay - 1
CASE 77
IF Yatay < 192 THEN Yatay = Yatay + 1
CASE 72
IF Dikey > 13 THEN Dikey = Dikey - 1
CASE 80
IF Dikey < 182 THEN Dikey = Dikey + 1
END SELECT
END IF
END FUNCTION
SUB Tusunut
DEF SEG = 0: POKE 1050, PEEK(1052)
FOR i = 1 TO 15: Bekle: NEXT
DEF SEG = 0: POKE 1050, PEEK(1052)
END SUB
SUB Yardim
COLOR 40: CLS
PRINT " Oyuna baƒlayìnca karƒìnìza bir"
PRINT "dikdörtgen gelir. Bu kutunun içinde"
PRINT "gizli bir resim vardìr.Ortadaki dudak"
PRINT "bu resmi korumaktadìr. Siz ise sol üst"
PRINT "köƒedeki hareketli nokta ile bu resmi"
PRINT "açmaya çalìƒacaksìnìz. Sìnìr çizgileri"
PRINT "içinde emniyette olursunuz. Dudak sizi"
PRINT "resmin içinde yakalarsa bir hakkìnìz"
PRINT "yanar. Cursor hareket tuƒlarì ile nokta"
PRINT "hareket eder. Resmin içine girip tekrar"
PRINT "kenara kaçmalìsìnìz....ÿyi eºlenceler..."
Bekle
DO: LOOP UNTIL INKEY$ <> ""
END SUB